bitkeeper revision 1.1236.51.2 (424d4e45s3_LSUrubUDpgLTFNoQ2xw)
authorvh249@arcadians.cl.cam.ac.uk <vh249@arcadians.cl.cam.ac.uk>
Fri, 1 Apr 2005 13:36:05 +0000 (13:36 +0000)
committervh249@arcadians.cl.cam.ac.uk <vh249@arcadians.cl.cam.ac.uk>
Fri, 1 Apr 2005 13:36:05 +0000 (13:36 +0000)
add support for refreshing vbds

Signed-off-by: Vincent Hanquez <vincent@xensource.com>
tools/python/xen/xend/XendClient.py
tools/python/xen/xend/XendDomain.py
tools/python/xen/xend/XendDomainInfo.py
tools/python/xen/xend/server/SrvDomain.py
tools/python/xen/xend/server/blkif.py
tools/python/xen/xm/main.py

index cdd0fea92984339171be0e5d8260a00825d343a6..8fbe3fa20377903b1eaa01939a6a9aa6c3021359 100644 (file)
@@ -308,6 +308,12 @@ class Xend:
                              {'op'      : 'device_create',
                               'config'  : fileof(config) })
 
+    def xend_domain_device_refresh(self, id, type, idx):
+        return self.xendPost(self.domainurl(id),
+                             {'op'      : 'device_refresh',
+                              'type'    : type,
+                              'idx'     : idx })
+
     def xend_domain_device_destroy(self, id, type, idx):
         return self.xendPost(self.domainurl(id),
                              {'op'      : 'device_destroy',
index 9089c75fb6ceba7e8567f438e0ae9e59eb2d93f3..8842c480cd90fd86b7e2be38557fe0b46da551d1 100644 (file)
@@ -687,6 +687,18 @@ class XendDomain:
         self.update_domain(dominfo.id)
         return val
     
+    def domain_device_refresh(self, id, type, idx):
+        """Refresh a device.
+
+        @param id:  domain id
+        @param idx:  device index
+        @param type: device type
+        """
+        dominfo = self.domain_lookup(id)
+        self.refresh_schedule()
+        val = dominfo.device_refresh(type, idx)
+        self.update_domain(dominfo.id)
+        return val
 
     def domain_device_destroy(self, id, type, idx):
         """Destroy a device.
index db2091ce085a3cb7bb106031a6c67084b5825c16..e97266b3030f324ecda9f6888bff74c8f35ebfb5 100644 (file)
@@ -551,6 +551,16 @@ class XendDomainInfo:
         dl.append(dev)
         self.devices[type] = dl
 
+    def refresh_device(self, type, dev):
+        """Refresh a device to a virtual machine.
+
+        @param type: device type
+        @param dev:  device
+        """
+        dl = self.devices.get(type, [])
+        if dev in dl:
+            dl.refresh(dev)
+
     def remove_device(self, type, dev):
         """Remove a device from a virtual machine.
 
@@ -912,6 +922,19 @@ class XendDomainInfo:
         old_index = self.config.index(old_full_config)
         self.config[old_index] = new_full_config
         return new_config
+
+    def device_refresh(self, type, idx):
+        """Refresh a device.
+
+        @param type: device type
+        @param idx:  device index
+        """
+        dev = self.get_device_by_index(type, idx)
+        if not dev:
+            raise VmError('invalid device: %s %s' % (type, idx))
+        devs = self.devices.get(type)
+        dev.refresh()
+        #self.refresh_device(type, dev)
         
     def device_destroy(self, type, idx):
         """Destroy a device.
index b99ccb8dfca2ce6632e73fef5e870460c62c9600..aeeb4b0c050df48331552eab85b2ad014e01d9d4 100644 (file)
@@ -131,6 +131,14 @@ class SrvDomain(SrvDir):
         d = fn(req.args, {'dom': self.dom.id})
         return d
 
+    def op_device_refresh(self, op, req):
+        fn = FormFn(self.xd.domain_device_refresh,
+                    [['dom', 'str'],
+                     ['type', 'str'],
+                     ['idx', 'str']])
+        val = fn(req.args, {'dom': self.dom.id})
+        return val
+
     def op_device_destroy(self, op, req):
         fn = FormFn(self.xd.domain_device_destroy,
                     [['dom', 'str'],
index 002b52949241d2ce7d9f0165aa23cee184f1eb5b..2974f070b003d3646e55d749e63b36fbdae93b24 100755 (executable)
@@ -414,6 +414,10 @@ class BlkDev(controller.SplitDev):
             val.append(['index', self.index])
         return val
 
+    def refresh(self):
+        log.debug("Refreshing vbd domain=%d idx=%s", self.controller.dom, self.idx)
+        self.interfaceChanged()
+
     def destroy(self, change=0):
         """Destroy the device. If 'change' is true notify the front-end interface.
 
index 689d45bd86ff9ee738a11bdea05b3eea2941edb0..43e12e3892970630ded58d16c0db77a5703e3e1c 100644 (file)
@@ -800,6 +800,28 @@ Create a virtual block device for a domain.
 
 xm.prog(ProgVbdCreate)
 
+class ProgVbdRefresh(Prog):
+    group = 'vbd'
+    name  = 'vbd-refresh'
+    info = """Refresh a virtual block device for a domain"""
+
+    def help(self, args):
+        print args[0], "DOM DEV"
+        print """
+Refresh a virtual block device for a domain.
+
+  DEV     - idx field in the device information
+"""
+
+    def main(self, args):
+        if len(args) != 3: self.err("%s: Invalid argument(s)" % args[0])
+        dom = args[1]
+        dev = args[2]
+        server.xend_domain_device_refresh(dom, 'vbd', dev)
+
+xm.prog(ProgVbdRefresh)
+
+
 class ProgVbdDestroy(Prog):
     group = 'vbd'
     name = 'vbd-destroy'